using System;
using System.Collections.Generic;
using System.Linq;

namespace UserLoginRegister
{
    /// <summary>
    /// 用户业务逻辑实现类（实现接口方法）
    /// </summary>
    public class UserService : IUserService
    {
        // 泛型集合：存储所有注册用户（核心存储容器）
        private readonly List<User> _registeredUsers = new List<User>();

        /// <summary>
        /// 注册功能实现
        /// </summary>
        public string Register(User user)
        {
            // 1. 校验用户是否已存在（foreach 迭代查询）
            foreach (var existingUser in _registeredUsers)
            {
                if (existingUser.Username.Equals(user.Username, StringComparison.OrdinalIgnoreCase))
                {
                    return $"注册失败：用户名「{user.Username}」已被占用！";
                }
            }

            // 2. 新增用户到泛型集合
            _registeredUsers.Add(user);
            return $"注册成功！用户名：{user.Username}，邮箱：{user.Email}";
        }

        /// <summary>
        /// 登录功能实现
        /// </summary>
        public string Login(string username, string password)
        {
            // foreach 迭代匹配用户名和密码
            foreach (var user in _registeredUsers)
            {
                if (user.Username.Equals(username, StringComparison.OrdinalIgnoreCase) && 
                    user.Password == password)
                {
                    return $"登录成功！欢迎您，{user.Username}！";
                }
            }
            return "登录失败：用户名或密码错误！";
        }

        /// <summary>
        /// 查看所有用户（foreach 迭代输出）
        /// </summary>
        public string GetAllUsers()
        {
            if (_registeredUsers.Count == 0)
            {
                return "当前暂无注册用户！";
            }

            var userListStr = "=== 所有注册用户 ===\n";
            int index = 1;
            foreach (var user in _registeredUsers)
            {
                userListStr += $"{index}. 用户名：{user.Username} | 邮箱：{user.Email}\n";
                index++;
            }
            return userListStr;
        }

        /// <summary>
        /// 删除用户（for 循环遍历，支持删除操作）
        /// </summary>
        public string DeleteUser(string username)
        {
            if (_registeredUsers.Count == 0)
            {
                return "删除失败：暂无注册用户可删除！";
            }

            // for 循环（反向遍历，避免删除元素后索引错乱）
            for (int i = _registeredUsers.Count - 1; i >= 0; i--)
            {
                if (_registeredUsers[i].Username.Equals(username, StringComparison.OrdinalIgnoreCase))
                {
                    _registeredUsers.RemoveAt(i); // 按索引删除
                    return $"删除成功：用户名「{username}」已移除！";
                }
            }
            return $"删除失败：未找到用户名「{username}」！";
        }

        /// <summary>
        /// 交互流程控制（控制台菜单）
        /// </summary>
        public void StartInteraction()
        {
            bool isRunning = true;
            while (isRunning)
            {
                Console.WriteLine("\n===== 用户系统 =====");
                Console.WriteLine("1. 注册");
                Console.WriteLine("2. 登录");
                Console.WriteLine("3. 查看所有用户");
                Console.WriteLine("4. 删除用户");
                Console.WriteLine("5. 退出");
                Console.Write("请选择操作（1-5）：");
                var choice = Console.ReadLine();

                switch (choice)
                {
                    case "1":
                        HandleRegister();
                        break;
                    case "2":
                        HandleLogin();
                        break;
                    case "3":
                        Console.WriteLine(GetAllUsers());
                        break;
                    case "4":
                        HandleDelete();
                        break;
                    case "5":
                        isRunning = false;
                        Console.WriteLine("系统已退出，感谢使用！");
                        break;
                    default:
                        Console.WriteLine("输入错误，请选择 1-5 之间的数字！");
                        break;
                }
            }
        }

        #region 私有辅助方法（封装输入逻辑，简化代码）
        /// <summary>
        /// 处理注册输入
        /// </summary>
        private void HandleRegister()
        {
            try
            {
                Console.WriteLine("\n===== 用户注册 =====");
                Console.Write("请输入用户名：");
                var username = Console.ReadLine()?.Trim();
                Console.Write("请输入密码：");
                var password = Console.ReadLine()?.Trim();
                Console.Write("请输入邮箱：");
                var email = Console.ReadLine()?.Trim();

                // 创建用户对象（触发属性校验）
                var newUser = new User(username, password, email);
                Console.WriteLine(Register(newUser));
            }
            catch (ArgumentException ex)
            {
                Console.WriteLine($"注册失败：{ex.Message}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"注册异常：{ex.Message}");
            }
        }

        /// <summary>
        /// 处理登录输入
        /// </summary>
        private void HandleLogin()
        {
            Console.WriteLine("\n===== 用户登录 =====");
            Console.Write("请输入用户名：");
            var username = Console.ReadLine()?.Trim();
            Console.Write("请输入密码：");
            var password = Console.ReadLine()?.Trim();

            Console.WriteLine(Login(username, password));
        }

        /// <summary>
        /// 处理删除输入
        /// </summary>
        private void HandleDelete()
        {
            Console.WriteLine("\n===== 删除用户 =====");
            Console.Write("请输入要删除的用户名：");
            var username = Console.ReadLine()?.Trim();
            Console.WriteLine(DeleteUser(username));
        }
        #endregion
    }
}